#include <iostream>
using namespace std;

// class Person
// {
// public:
//     virtual void BuyTicket()
//     {
//         cout << "Person Buy Ticket" << endl;
//     }
// };
//
// class Student : public Person
// {
// public:
//     virtual void BuyTicket()
//     {
//         cout << "Student Buy Ticket" << endl;
//     }
// };
//
// void Func(Person & people)
// {
//     people.BuyTicket();
// }
//
// int main()
// {
//     Person person;
//     Student student;
//     Func(person);
//     Func(student);
//     return 0;
// }

// class A {};
//
// class B : public A {};
//
// class Person
// {
// public:
//     virtual A* f()
//     {
//         return new A;
//     }
// };
//
// class Student : public Person
// {
// public:
//     virtual B* f()
//     {
//         return new B;
//     }
// };

// class Person
// {
// public:
//     virtual ~Person()
//     {
//         cout << "~Person" << endl;
//     }
// };
//
// class Student : public Person
// {
// public:
//     virtual ~Student()
//     {
//         cout << "~Student" << endl;
//     }
// };
//
// int main()
// {
//     Person* p1 = new Person;
//     Person* p2 = new Student;
//     delete p1;
//     delete p2;
//
//     return 0;
// }

// class Car
// {
// public:
//     virtual void Run() final
//     {}
// };
//
// class Bus : public Car
// {
// public:
//     virtual void Run()
//     {
//         cout << "Bus Run" << endl;
//     }
// };

class Car
{
public:
    virtual void Run()
    {}
};

class Bus : public Car
{
public:
    virtual void Run() override
    {
        cout << "Bus Run" << endl;
    }
};